iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0

昨天吃午餐時手機跳了一個追蹤通知,然後我手殘把那位同學給刪掉了😱
如果你有看到的話我真的很抱歉rr

前言

據說 Web 是許多人入門的領域(?),相較於其他領域而言,Web 相關的漏洞通常比較容易理解一點點,但是 Web 相關的手法相當多。除了常聽到的 SQLi、XSS 以外,CSRF、SSRF 以及任意上傳等等都屬於打 Web 會出現的手法,其他還有很多我也不太了解的類型,可以參考 CTF Wiki 的介紹。

今天會介紹 SQLi 的基本原理,接著明天是找題目來實際操作一次,那我們開始吧!

SQL Injection

昨天的文章中有提到 OWASP Top 10 榜上有名的 Injection,SQLi 就是其中之一。

通常是使用者送的資料進到 Interpreter 前沒有經過過濾,而可以達到系統預期之外的操作。

舉個例子🌰

系統上有段登入的 SQL query 如下:

username = input("請輸入 username: ")
password = input("請輸入 password: ")

sql_query = f"SELECT * FROM users WHERE username='{username}' AND password = '{password}'"

這是最直覺會寫出來的樣子,那會有什麼問題呢?
假設攻擊者在 username 中輸入了 admin' OR '1'='1,帶入 query 會變成

SELECT * FROM users WHERE username = 'admin' OR '1'='1' AND password = '任意密碼'

由於 OR '1'='1' 這個陳述式會讓條件始終成立,使得攻擊者通過了身份驗證,並取得 admin 這個 user 的權限。雖然現實世界的情況往往沒有這麼簡單,但這個例子可以簡單理解 SQLi 是怎麼辦到的。

如何防禦

後記

學習 SQLi 的時候發現看到的例子好像大多都是 SELECT 語句,我就查詢了一下如果是其他語句有什麼手法, 於是找到 PortSwigger 的這篇文章:SQL Injection in Different Statement Types,介紹得淺顯易懂,推薦大家也看看!


上一篇
Day 4. Web Security - OWASP Top 10
下一篇
Day 6. Web Security - SQL Injection 實戰
系列文
進了資安公司當後端 RD 才入門資安會不會太晚了30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言